import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types.{StringType, StructField, StructType}

/**
 * @author guchenbo
 * @date 2021/12/28
 */
object SparkExcel {

  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().master("local").appName("spark excel")
      .getOrCreate()

    val path = "/Users/guchenbo/Downloads/boxFileTemp.xlsx"

    val schema = StructType(List(StructField("variable_name", StringType), StructField("range", StringType)))

    val df = spark.read
      .format("com.crealytics.spark.excel")
      //      .option("dataAddress", "'Sheet2'!A1:G2") // 可选,设置选择数据区域 例如 A1:E2。
      .option("header", "true") // 必须，是否使用表头，false的话自己命名表头（_c0）,true则第一行为表头
      //      .option("treatEmptyValuesAsNulls", "true") // 可选, 是否将空的单元格设置为null ,如果不设置为null 遇见空单元格会报错 默认t: true
      //      .option("inferSchema", "true") // 可选, default: false
      //      .option("addColorColumns", "true") // 可选, default: false
      //      .option("timestampFormat", "yyyy-mm-dd hh:mm:ss") // 可选, default: yyyy-mm-dd hh:mm:ss[.fffffffff]
      //      .option("excerptSize", 6) // 可选, default: 10. If set and if schema inferred, number of rows to infer schema from
      //      .option("workbookPassword", "pass") // 可选, default None. Requires unlimited strength JCE for older JVMs====
      //      .option("maxRowsInMemory", 20) // 可选, default None. If set, uses a streaming reader which can help with big files====
      .schema(schema) // 可选, default: Either inferred schema, or all columns are Strings
      .load(path)
    df.show()
  }
}
